package org.yelongframework.excel.data.fill.excel;

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;

import org.yelongframework.excel.data.fill.sheet.SheetDataFillException;
import org.yelongframework.excel.data.fill.sheet.SheetDataFillScheme;
import org.yelongframework.excel.data.fill.sheet.manager.SheetDataFillerManager;
import org.yelongframework.excel.sheet.ExcelSheet;
import org.yelongframework.excel.workbook.ExcelWorkbook;

/**
 * 默认实现
 * 
 * @since 1.0.0
 */
public class DefaultExcelDataFiller implements ExcelDataFiller {

	/** 工作表数据填充器管理器 */
	private final SheetDataFillerManager sheetDataFillerManager;

	// ==================================================构造器==================================================

	/**
	 * @param sheetDataFillerManager 工作表数据填充器管理器
	 */
	public DefaultExcelDataFiller(SheetDataFillerManager sheetDataFillerManager) {
		this.sheetDataFillerManager = Objects.requireNonNull(sheetDataFillerManager, "sheetDataFillerManager");
	}

	// ==================================================工作薄==================================================

	@Override
	public void dataFill(ExcelWorkbook excelWorkbook, Map<Integer, List<SheetDataFillScheme>> sheetDataFillSchemeMap)
			throws SheetDataFillException {
		for (Entry<Integer, List<SheetDataFillScheme>> entry : sheetDataFillSchemeMap.entrySet()) {
			Integer sheetIndex = entry.getKey();
			List<SheetDataFillScheme> sheetDataFillSchemeList = entry.getValue();
			ExcelSheet excelSheet = excelWorkbook.getSheet(sheetIndex);
			if (null == excelSheet) {
				throw new SheetDataFillException("工作薄不存在【" + sheetIndex + "】页工作表，无法对该工作表进行数据填充。");
			}
			dataFill(excelSheet, sheetDataFillSchemeList);
		}
	}

	// ==================================================工作表==================================================

	@Override
	public void dataFill(ExcelSheet excelSheet, SheetDataFillScheme sheetDataFillScheme) throws SheetDataFillException {
		sheetDataFillerManager.dataFill(excelSheet, sheetDataFillScheme);
	}

	@Override
	public void dataFill(ExcelSheet excelSheet, List<SheetDataFillScheme> sheetDataFillSchemeList)
			throws SheetDataFillException {
		for (SheetDataFillScheme sheetDataFillScheme : sheetDataFillSchemeList) {
			sheetDataFillerManager.dataFill(excelSheet, sheetDataFillScheme);
		}
	}
	// ==================================================工作表数据填充器管理器==================================================

	@Override
	public SheetDataFillerManager getSheetDataFillerManager() {
		return sheetDataFillerManager;
	}

}
